package demo01_basicGrammer

object Demo03_control_if {

  def main(args: Array[String]): Unit = {
    /**
     * 1.if...else...
     */
    val age = 68
    val message: Any = if (age > 0 && age <= 30) {
      "young"
    } else if (age > 30 && age <= 60) {
      "old"
    } else {
      true
    }

    //如果某个条件下只有一句需要执行，可以省略大括号
    val x = 60
    val y = 20
    if(x>y) true else false


    /**
     * 2.match...case... 模式匹配
     *  做等值判断 case后匹配的值必须与被匹配的变量类型保持一致
     *  case后面不管执行多少句话，都可以不加大括号
     */

    //2.1 正常的使用，可以执行语句，也可以执行返回值
    val message_match = x>y match {
      case true => "max:"+x
      case false => "max:"+y
    }
    println(message_match)

    //2.2 值绑定 在所有case的最下面可以定义一个 case 变量名 匹配的是所有的内容 一般放在最下面 可以使用_（通配符）代替
    // 如果内容没有匹配的话，直接报错
    val statusCode = 200
    val backMessage = statusCode match {
      case 200 =>
        println("一切正常")
        "anything is OK"
      case 404 =>
        println("你要找的页面走丢了")
        "page not found"
      case 500 =>
        println("您要找的页面崩溃了")
        "server error"
      case _ =>
        println("您要找的页面发生了未知错误")
        "unknown error"
    }
    println(s"backMessage:${backMessage}")
  }

  //2.3 哨卫模式 可以在case匹配中添加if条件的，直接过滤掉不符合规则的数据
  val num = 60
  num match {
    case n if n%2==0=> println(s"${n}是偶数")
    case n => println(s"${n}是奇数")
  }

  //2.4 模式替换式 可以使用 | 符号对多个匹配的内容做统一的处理
  val day = "Saturday"
  day match {
    case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" => println("weekday")
    case "Saturday" | "Sunday" => println("weekend")
  }
}
